////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2017-2018 Qualcomm Technologies, Inc.
// All Rights Reserved.
// Confidential and Proprietary - Qualcomm Technologies, Inc.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// THIS IS AUTO-GENERATED CODE.  PLEASE DO NOT EDIT (File bug reports against tools).
///
/// Auto-generated by: ParameterParser V1.1.4
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @file  camxpdafconfig.h
/// @brief Auto-generated Chromatix parameter file
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#ifndef CAMXPDAFCONFIG_H
#define CAMXPDAFCONFIG_H

#include "parametermodule.h"
#include "parameterfilesymboltable.h"
#include "parametertypes.h"
#include "camxsensorcommon.h"

#define CAMX_NAMESPACE_BEGIN namespace CamX {
#define CAMX_NAMESPACE_END }

CAMX_NAMESPACE_BEGIN

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// PDAFPixelShieldInformation
/// Comments:      PDAF Pixel Shield Information
///                 Simple Type Definitions
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
enum class PDAFPixelShieldInformation
{
    LEFTDIODE     = 0,
    RIGHTDIODE    = 1,
    LEFTSHIELDED  = 2,
    RIGHTSHIELDED = 3
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// PDAFOrientation
/// Comments:      PDAF Sensor Orientation
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
enum class PDAFOrientation
{
    DEFAULT       = 0,
    MIRROR        = 1,
    FLIP          = 2,
    MIRRORANDFLIP = 3
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// PDAFBufferDataFormat
/// Comments:      PDAF Buffer Data Format
///                MIPI10: compressed, [9:2] [9:2] [9:2] [9:2] [1:0][1:0][1:0][1:0]
///                PACKED10: Q10 format
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
enum class PDAFBufferDataFormat
{
    MIPI8      = 0,
    MIPI10     = 1,
    PACKED10   = 2,
    UNPACKED16 = 3
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// PDAFPixelOrderType
/// Comments:      PDAF Pixel Order Type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
enum class PDAFPixelOrderType
{
    DEFAULT     = 0,
    LEFTTORIGHT = 1,
    RIGHTTOLEFT = 2
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// PDAFType
/// Comments:      PDAF Type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
enum class PDAFType
{
    PDTypeUnknown = 0,
    PDType1       = 1,
    PDType2       = 2,
    PDType3       = 3,
    PDType2PD     = 4
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// SensorPDStatsFormat
/// Comments:      Sensor PD Stats Format for TYPE1
///                SensorPDStatsCustom: Opaque PD Stats format, need customer parse the pd stats
///                SensorPDStatsRaw10Conf8BitPd10Bit: Sensor Pd Stats is Raw10 Confidece 8bit Pd 10bit format
///                SensorPDStatsRaw10Conf11BitPd11Bit: Sensor Pd Stats is Raw10 Confidece 11bit Pd 11bit format
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
enum class SensorPDStatsFormat
{
    SensorPDStatsCustom                = 0,
    SensorPDStatsRaw10Conf8BitPd10Bit  = 1,
    SensorPDStatsRaw10Conf11BitPd11Bit = 2
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// PDAFInformation
/// Comments:      PDAF information
///                 element for PDAF Name
///                 element for PDAF Library Name
///                 element for stats data type
///                 element for orientation
///                 element for blackLevel
///                 element for defocus confidence threshold
///                 element for defocus bit shift
///                 element for type1 sensor pd stats format
///                 element for defocus confidence threshold
///                 element for defocus confidence threshold
///                 element for PD Type
///                 Complex Type Definitions
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct PDAFInformation
{
    /// PDAF Name
    CHAR*               PDAFName;
    /// PDAF Library Name
    UINT32              PDAFLibraryNameExists;
    UINT32              PDAFLibraryNameID;
    CHAR*               PDAFLibraryName;
    /// PDAF Stats Data Type
    UINT32              PDStatsDataType;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// PDOrientation
    /// Comments:      PDAF Sensor Orientation
    ///                PDAF Sensor orientation
    ///                Valid values: DEFAULT, MIRROR, FLIP, MIRRORANDFLIP
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    PDAFOrientation     PDOrientation;
    /// Sensor Black level
    UINT32              PDBlackLevel;
    /// Defocus confidence threshold level
    INT32               PDDefocusConfidenceThreshold;
    /// Defocus Bit Shift
    /// For T1 calibration with 10 bit DAC
    /// set it to 12 if actuator driver uses 12-bit DAC
    /// set it to 14 if actuator driver uses 10-bit DAC
    UINT32              PDDefocusBitShift;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// PDSensorPDStatsFormat
    /// Comments:      Sensor PD Stats Format for TYPE1
    ///                SensorPDStatsCustom: Opaque PD Stats format, need customer parse the pd stats
    ///                SensorPDStatsRaw10Conf8BitPd10Bit: Sensor Pd Stats is Raw10 Confidece 8bit Pd 10bit format
    ///                SensorPDStatsRaw10Conf11BitPd11Bit: Sensor Pd Stats is Raw10 Confidece 11bit Pd 11bit format
    ///                Sensor PD Stats Format for Type1
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    SensorPDStatsFormat PDSensorPDStatsFormat;
    /// PD Offset Correction
    FLOAT               PDOffsetCorrection;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// PDPixelOrderType
    /// Comments:      PDAF Pixel Order Type
    ///                PD Pixel Order Type
    ///                Valid Values: LEFTTORIGHT, RIGHTTOLEFT
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    PDAFPixelOrderType  PDPixelOrderType;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// PDType
    /// Comments:      PDAF Type
    ///                PD Type
    ///                Valid Values: PDType1, PDType2, PDType3, PDType2PD
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    PDAFType            PDType;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// PDAFPixelCoordinates
/// Comments:      One pixel coordinate in a block
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct PDAFPixelCoordinates
{
    UINT32                     PDXCoordinate;
    UINT32                     PDYCoordinate;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// PDPixelShieldInformation
    /// Comments:      PDAF Pixel Shield Information
    ///                 Simple Type Definitions
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    PDAFPixelShieldInformation PDPixelShieldInformation;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// PDAFBlockPattern
/// Comments:      Block Pattern details of one block
///                PDPixelCount: PDAF pixel number inside a window
///                PDPixelCoordinates: Pixel 2D pos, left_pixel,right_pixel
///                Should not contain the offset.
///                Offset should add back for correct skip pattern.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct PDAFBlockPattern
{
    UINT32                      PDPixelCount;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// PDPixelCoordinates - Array
    /// Min Length:    1
    /// Max Length:    256
    /// Comments:      One pixel coordinate in a block
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                      PDPixelCoordinatesCount;
    UINT32                      PDPixelCoordinatesID;
    PDAFPixelCoordinates*       PDPixelCoordinates;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// PDBlockDimensions
    /// Comments:      Width and height of the frame or subframe
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    Dimension PDBlockDimensions;
    UINT32                      PDOffsetHorizontal;
    UINT32                      PDOffsetVertical;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// PDAFSensorNativePatternInformation
/// Comments:      Sensor Native pattern infomation
///                 element for pdBlockCountHorizontal
///                 element for pdBlockCountVertical
///                 element for PD Block Pattern
///                 element for PD Crop Region
///                 element for downscale factor horizontal
///                 element for downscale factor vertical
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct PDAFSensorNativePatternInformation
{
    /// Number of PD blocks in X direction
    /// 2PD: PD Image Width
    UINT32                           PDBlockCountHorizontal;
    /// Number of PD blocks in Y direction
    /// 2PD: PD Image Height
    UINT32                           PDBlockCountVertical;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// PDBlockPattern - Optional
    /// Min Length:    0
    /// Max Length:    1
    /// Comments:      Block Pattern details of one block
    ///                PDPixelCount: PDAF pixel number inside a window
    ///                PDPixelCoordinates: Pixel 2D pos, left_pixel,right_pixel
    ///                Should not contain the offset.
    ///                Offset should add back for correct skip pattern.
    ///                PD Block Pattern
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                           PDBlockPatternExists;
    UINT32                           PDBlockPatternID;
    PDAFBlockPattern                 PDBlockPattern;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// PDCropRegion
    /// Comments:      Frame dimension: contains xStart, yStart, width and height
    ///                In-sensor Cropped region
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FrameDimension PDCropRegion;
    /// Horizontal Downscale factor
    FLOAT                            PDDownscaleFactorHorizontal;
    /// Vertical Downscale factor
    FLOAT                            PDDownscaleFactorVertical;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// PDAFBlockPatternInformation
/// Comments:      Block Pattern Info about all the blocks
///                PDStride: This is the number of pixels in the PD stats buffer
///                after which there is a jump to a new line.
///                PDBufferDataFormat: This is the data type of output stats buffer.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct PDAFBlockPatternInformation
{
    UINT32               PDStride;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// PDBufferFormat
    /// Comments:      PDAF Buffer Data Format
    ///                MIPI10: compressed, [9:2] [9:2] [9:2] [9:2] [1:0][1:0][1:0][1:0]
    ///                PACKED10: Q10 format
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    PDAFBufferDataFormat PDBufferFormat;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// PDBlockPattern - Optional
    /// Min Length:    0
    /// Max Length:    1
    /// Comments:      Block Pattern details of one block
    ///                PDPixelCount: PDAF pixel number inside a window
    ///                PDPixelCoordinates: Pixel 2D pos, left_pixel,right_pixel
    ///                Should not contain the offset.
    ///                Offset should add back for correct skip pattern.
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32               PDBlockPatternExists;
    UINT32               PDBlockPatternID;
    PDAFBlockPattern     PDBlockPattern;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// PDAFConfigurationData
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct PDAFConfigurationData
{
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Binary file symbol table entry ID
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32 SymbolTableID;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// module_version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct module_versionStruct
    {
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// Binary file symbol table entry ID
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 SymbolTableID;
        INT32 major_revision;
        INT32 minor_revision;
        INT32 incr_revision;
    } module_version;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// PDInfo
    /// Comments:      PDAF information
    ///                 element for PDAF Name
    ///                 element for PDAF Library Name
    ///                 element for stats data type
    ///                 element for orientation
    ///                 element for blackLevel
    ///                 element for defocus confidence threshold
    ///                 element for defocus bit shift
    ///                 element for type1 sensor pd stats format
    ///                 element for defocus confidence threshold
    ///                 element for defocus confidence threshold
    ///                 element for PD Type
    ///                 Complex Type Definitions
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    PDAFInformation                     PDInfo;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// PDSensorNativePatternInfo - Array
    /// Min Length:    1
    /// Max Length:    14
    /// Comments:      Sensor Native pattern infomation
    ///                 element for pdBlockCountHorizontal
    ///                 element for pdBlockCountVertical
    ///                 element for PD Block Pattern
    ///                 element for PD Crop Region
    ///                 element for downscale factor horizontal
    ///                 element for downscale factor vertical
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                              PDSensorNativePatternInfoCount;
    UINT32                              PDSensorNativePatternInfoID;
    PDAFSensorNativePatternInformation* PDSensorNativePatternInfo;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// PDBufferBlockPatternInfo - Array
    /// Min Length:    1
    /// Max Length:    14
    /// Comments:      Block Pattern Info about all the blocks
    ///                PDStride: This is the number of pixels in the PD stats buffer
    ///                after which there is a jump to a new line.
    ///                PDBufferDataFormat: This is the data type of output stats buffer.
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                              PDBufferBlockPatternInfoCount;
    UINT32                              PDBufferBlockPatternInfoID;
    PDAFBlockPatternInformation*        PDBufferBlockPatternInfo;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// PDAFConfigurationDataClass
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class PDAFConfigurationDataClass : public ParameterModule, public PDAFConfigurationData
{
public:
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static const UINT16 MAJOR = 1;
    static const UINT16 MINOR = 0;
    static const UINT32 PATCH = 0;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Default Constructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    PDAFConfigurationDataClass(
        const CHAR* name);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Constructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    PDAFConfigurationDataClass(
        const CHAR* name,
        UINT32 modeId,
        UINT16 mode,
        UINT16 subMode,
        UINT32 group);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Destructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual ~PDAFConfigurationDataClass();

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// GetName
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static const CHAR* GetName(
        const CHAR* type);


    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load PDAFInformation
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadPDAFInformation(
        ParameterFileSymbolTableEntry* entry,
        PDAFInformation* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load PDAFPixelCoordinates
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadPDAFPixelCoordinates(
        ParameterFileSymbolTableEntry* entry,
        PDAFPixelCoordinates* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load PDAFBlockPattern
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadPDAFBlockPattern(
        ParameterFileSymbolTableEntry* entry,
        PDAFBlockPattern* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load PDAFSensorNativePatternInformation
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadPDAFSensorNativePatternInformation(
        ParameterFileSymbolTableEntry* entry,
        PDAFSensorNativePatternInformation* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load PDAFBlockPatternInformation
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadPDAFBlockPatternInformation(
        ParameterFileSymbolTableEntry* entry,
        PDAFBlockPatternInformation* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load PDAFConfigurationData
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadPDAFConfigurationData(
        ParameterFileSymbolTableEntry* entry,
        PDAFConfigurationData* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load module_versionStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadmodule_versionStruct(
        ParameterFileSymbolTableEntry* entry,
        PDAFConfigurationData::module_versionStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload PDAFInformation
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadPDAFInformation(
        PDAFInformation* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload PDAFBlockPattern
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadPDAFBlockPattern(
        PDAFBlockPattern* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload PDAFSensorNativePatternInformation
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadPDAFSensorNativePatternInformation(
        PDAFSensorNativePatternInformation* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload PDAFBlockPatternInformation
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadPDAFBlockPatternInformation(
        PDAFBlockPatternInformation* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload PDAFConfigurationData
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadPDAFConfigurationData(
        PDAFConfigurationData* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Parse symbol table entry, and return a new object
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual ParameterModule* Parse(
        ParameterSetManager* manager,
        ParameterFileSymbolTableEntry* entry) const;

}; // End class PDAFConfigurationDataClass

CAMX_NAMESPACE_END
#endif // CAMXPDAFCONFIG_H

